//定制请求的实例

//导入axios  npm install axios
import axios from 'axios';
import { ElLoading } from 'element-plus'  //Loading在需要的时候展示加载动画，防止页面失去响应提高用户体验（例如表格）。
import { ElMessage } from 'element-plus'  //Message用于显示全局的通知提示，支持全局配置和单例调用。
import { useTokenStore } from '@/stores/token.js'
//定义一个变量,记录公共的前缀  ,  baseURL
//const baseURL = 'http://localhost:8080';
const baseURL = '/api';
const instance = axios.create({ baseURL })

// 请求拦截器-在请求之前拦截,展示加载动画
// instance.interceptors.request.use(
//     config=>{
//         //展示加载动画,设置加载时间
//         const loading = ElLoading.service({
//             lock:true,
//             text:'加载中...',
//             background:'rgba(0,0,0,0.7)'
//         })
//         //将token添加到请求头中
//         //config.headers.token = localStorage.getItem('token');
//         return config;
//     },
//     err=>{
//         return Promise.reject(err);
//     }
// )
import router from '@/router'; //导入路由实例
// 添加请求拦截器
instance.interceptors.request.use(
    config => {
        // 在发送请求之前做些什么
        // 将token添加到请求头中
        const tokenStore = useTokenStore();
        // 判断是否有token
        if (tokenStore.token) {
            config.headers.Authorization = tokenStore.token;
        }
        return config;
    }
    , err => {
        // 对请求错误做些什么
        return Promise.reject
    }
);

//添加响应拦截器
instance.interceptors.response.use(
    result => {
        if (result.data.code === 0) {
            //关闭加载动画
            //ElLoading.close();
            return result.data;
        } else {
            ElMessage.error(result.data.message ? result.data.message : '请求失败');
            return Promise.reject(result.data.msg); //异步的状态转化成失败的状态
        }
    },
    // 请求失败的回调函数
    err => {
        if (err.response.status === 401) {
            ElMessage.error('token过期,请重新登录');
            //token过期,跳转到登录页面
            router.push('/login');
        }else {
            ElMessage.error(result.data.message ? result.data.message : '请求失败');
        }
        return Promise.reject(err);//异步的状态转化成失败的状态
    }
)

export default instance;